# 指定使用的C编译器
CC = gcc

# 设置编译标志：启用所有警告、包含调试信息、启用POSIX功能
CFLAGS = -Wall -g -D_XOPEN_SOURCE=700

# 默认目标，编译所有程序
all: server client

# 编译服务端程序的规则
# 依赖于server.c源文件和common.h头文件
server: server.c common.h
	# 使用指定的编译器和编译选项编译服务端程序，并链接pthread库
	$(CC) $(CFLAGS) -o server server.c -lpthread

# 编译客户端程序的规则
# 依赖于client.c源文件和common.h头文件
client: client.c common.h
	# 使用指定的编译器和编译选项编译客户端程序
	$(CC) $(CFLAGS) -o client client.c

# 测试目标，提供运行测试的说明
# 依赖于server和client目标，确保程序已编译
test: server client
	# 显示运行测试的说明信息
	@echo "运行测试需要手动交互:"
	@echo "1. 启动服务端: ./server &"
	@echo "2. 运行客户端: ./client"
	@echo "3. 按照菜单提示测试各项功能"

# 清理目标，删除生成的文件
clean:
	# 删除编译生成的可执行文件
	rm -f server client
	# 删除命名管道文件
	rm -f /tmp/task_pipe

# 声明伪目标，避免与同名文件冲突
.PHONY: all test clean